﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Configuration;
using Insifo.BE.Gen;
using Insifo.BE.Seg;

namespace Insifo.DL.Gen
{
    public class DLAplicacion
    {
        #region  Members

        /// <summary>
        /// Lista 
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarMantenimiento()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Lista Por
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarPorSuit(int pintIdSuit)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Aplicacion_Listar_X_Suit");
            dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
            try
            {
                sqlDB.AddInParameter(dbCmd, "@ai_IdSuit", DbType.String, pintIdSuit);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;
        }

        /// <summary>
        /// Lista Por
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarPorUsuario(BEAplicacion pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Aplicacion_X_Usuario_Listar");
            dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
            try
            {
                sqlDB.AddInParameter(dbCmd, "@ai_IdSuit", DbType.String, pbe.IdSuit);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoUsuario", DbType.String, pbe.CodigoUsuario);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;
        }


        /// <summary>
        /// Método obtiene una Aplicacion
        /// </summary>
        /// <returns>Devuelve Objeto</returns>
        public BEAplicacion ObtenerPorCodigo(BEAplicacion pbe)
        {
            BEAplicacion be = new BEAplicacion();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Aplicacion_Obtener_X_Codigo");
            dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
            try
            {
                sqlDB.AddInParameter(dbCmd, "@as_CodigoAplicacion", DbType.String, pbe.CodigoAplicacion);

                using (IDataReader dr = sqlDB.ExecuteReader(dbCmd))
                {
                    while (dr.Read())
                    {
                        be.IdAplicacion = DBValue.Get<int>(dr, "IdAplicacion");
                        be.Descripcion = DBValue.Get<string>(dr, "Descripcion");

                        break;
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        /// <summary>
        /// Método obtiene las Aplicaciones
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar()
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Aplicacion_Listar");
            dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
            try
            {
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                //if (dbCmd.Connection.State == ConnectionState.Open)
                //dbCmd.Connection.Close();
                dbCmd.Dispose();
            }
            return ds;
        }

        /// <summary>
        /// Método obtiene los Aplicacions
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarPorSuitAplicaciones(BEAplicacion pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Aplicacion_Listar_X_Suit_Apl");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                //sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                //sqlDB.AddInParameter(dbCmd, "@as_CodigoAplicacion", DbType.String, pbe.CodigoAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@ai_IdSuit", DbType.Int32, pbe.IdSuit);
                //sqlDB.AddInParameter(dbCmd, "@as_Imagen", DbType.String, pbe.Imagen);
                //sqlDB.AddInParameter(dbCmd, "@as_DominioURL", DbType.String, pbe.DominioURL);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@ai_Pagina", DbType.Int32, pbe.Pagina);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;
        }

        /// <summary>
        /// Método obtiene una Aplicacion
        /// </summary>
        /// <returns>Devuelve Objeto</returns>
        //public BEAplicacion Obtener(BEAplicacion pbe)
        //{
        //    BEAplicacion be = new BEAplicacion();
        //    SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
        //    DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Aplicacion_Obtener");
        //    dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
        //    try
        //    {
        //        sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);

        //        using (IDataReader dr = sqlDB.ExecuteReader(dbCmd))
        //        {
        //            while (dr.Read())
        //            {
        //                be.Descripcion = DBValue.Get<string>(dr, "Descripcion");
        //                break;
        //            }
        //        }
        //    }
        //    catch (Exception)
        //    {
        //        throw;
        //    }
        //    finally
        //    {
        //        dbCmd.Dispose();
        //    }
        //    return be;
        //}

        /// <summary>
        /// Método obtiene Datos del Usuario
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        /// 
        public BEAplicacion Obtener(BEAplicacion pbe)
        {
            BEAplicacion be = new BEAplicacion();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Aplicacion_Obtener");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        //be.IdAplicacion = DBValue.Get<Int32>(reader, "IdAplicacion");
                        be.CodigoAplicacion = DBValue.Get<String>(reader, "CodigoAplicacion");
                        be.Descripcion = DBValue.Get<String>(reader, "Descripcion");
                        be.IdSuit = DBValue.Get<Int32>(reader, "IdSuit");
                        be.Imagen = DBValue.Get<string>(reader, "Imagen");
                        be.DominioURL = DBValue.Get<string>(reader, "DominioURL");

                        be.Estado = DBValue.Get<String>(reader, "Estado");
                        be.UsuarioModificacion = DBValue.Get<String>(reader, "UsuarioModificacion");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        be.UsuarioCreacion = DBValue.Get<String>(reader, "UsuarioCreacion");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        /// <summary>
        /// Método Inserta un Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEAplicacion Insertar(BEAplicacion pbe)
        {
            BEAplicacion be = new BEAplicacion();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Aplicacion_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@as_CodigoAplicacion", DbType.String, pbe.CodigoAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@ai_IdSuit", DbType.Int32, pbe.IdSuit);
                sqlDB.AddInParameter(dbCmd, "@as_Imagen", DbType.String, pbe.Imagen);
                sqlDB.AddInParameter(dbCmd, "@as_DominioURL", DbType.String, pbe.DominioURL);

                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioCreacion", DbType.String, pbe.UsuarioCreacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdAplicacion = DBValue.Get<int>(reader, "IdAplicacion");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        /// <summary>
        /// Método Actualiza un Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEAplicacion Actualizar(BEAplicacion pbe)
        {
            BEAplicacion be = new BEAplicacion();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Aplicacion_Actualizar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoAplicacion", DbType.String, pbe.CodigoAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@ai_IdSuit", DbType.Int32, pbe.IdSuit);
                sqlDB.AddInParameter(dbCmd, "@as_Imagen", DbType.String, pbe.Imagen);
                sqlDB.AddInParameter(dbCmd, "@as_DominioURL", DbType.String, pbe.DominioURL);

                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdAplicacion = DBValue.Get<Int32>(reader, "IdAplicacion");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        /// <summary>
        /// Método Actualiza el Estado Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEAplicacion Eliminar(BEAplicacion pbe)
        {
            BEAplicacion be = new BEAplicacion();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Aplicacion_Eliminar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);
                sqlDB.AddInParameter(dbCmd, "@adt_FechaModificacion", DbType.DateTime, pbe.FechaModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdAplicacion = DBValue.Get<Int32>(reader, "IdAplicacion");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        #endregion  Members
    }
}
